package de.blau.android.dialogs;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AlertDialog.Builder;
import android.support.v7.app.AppCompatDialog;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import de.blau.android.Main;
import de.blau.android.Map;
import de.blau.android.R;
import de.blau.android.listener.DoNothingListener;
import de.blau.android.prefs.Preferences;
import de.blau.android.util.ThemeUtils;
/**
* Display a dialog allowing the user to change some properties of the current background
*
*/
public class BackgroundProperties extends DialogFragment
{
private static final String DEBUG_TAG = BackgroundProperties.class.getSimpleName();
private static final String TAG = "fragment_background_properties";
/**
*/
static public void showDialog(FragmentActivity activity) {
dismissDialog(activity);
setDialogLayout(activity);
FragmentManager fm = activity.getSupportFragmentManager();
BackgroundProperties backgroundPropertiesFragment = newInstance();
if (backgroundPropertiesFragment != null) {
backgroundPropertiesFragment.show(fm, TAG);
} else {
Log.e(DEBUG_TAG,"Unable to create background properties dialog ");
}
}
private static void dismissDialog(FragmentActivity activity) {
FragmentManager fm = activity.getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Fragment fragment = fm.findFragmentByTag(TAG);
if (fragment != null) {
ft.remove(fragment);
}
ft.commit();
}
/**
*/
static private BackgroundProperties newInstance() {
BackgroundProperties f = new BackgroundProperties();
f.setShowsDialog(true);
return f;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
Log.d(DEBUG_TAG, "onAttach");
if (!(activity instanceof Main)) {
throw new ClassCastException(activity.toString() + " can ownly be called from Main");
}
}
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setCancelable(true);
}
@NonNull
@SuppressLint("InflateParams")
@Override
public AppCompatDialog onCreateDialog(Bundle savedInstanceState)
{
Preferences prefs= new Preferences(getActivity());
Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.menu_tools_background_properties);
final LayoutInflater inflater = ThemeUtils.getLayoutInflater(getActivity());
DoNothingListener doNothingListener = new DoNothingListener();
setDialogLayout(getActivity());
View layout = inflater.inflate(R.layout.background_properties, null);
SeekBar seeker = (SeekBar) layout.findViewById(R.id.background_contrast_seeker);
seeker.setProgress(contrast2progress(prefs.getContrastValue()));
seeker.setOnSeekBarChangeListener(createSeekBarListener());
builder.setView(layout);
builder.setPositiveButton(R.string.okay, doNothingListener);
return builder.create();
}
/**
* Convert contrast value -1...+1 to a int suitable for a progress bar
* @param contrast
* @return
*/
static int contrast2progress(float contrast) {
return (int) ((contrast+1)*127.5f);
}
private OnSeekBarChangeListener createSeekBarListener() {
return new OnSeekBarChangeListener() {
@Override
public void onProgressChanged(final SeekBar seekBar, int progress, final boolean fromTouch) {
Preferences prefs= new Preferences(getActivity());
Map map = ((Main) getActivity()).getMap();
float contrast = progress/127.5f - 1f; // range from -1 to +1
map.getOpenStreetMapTilesOverlay().setContrast(contrast);
map.invalidate();
prefs.setContrastValue(contrast);
}
@Override
public void onStartTrackingTouch(final SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(final SeekBar arg0) {
}
};
}
private static void setDialogLayout(Activity activity){
Preferences prefs =new Preferences(activity);
final LayoutInflater inflater = ThemeUtils.getLayoutInflater(activity);
View layout = inflater.inflate(R.layout.background_properties, null);
SeekBar seeker = (SeekBar) layout.findViewById(R.id.background_contrast_seeker);
seeker.setProgress(contrast2progress(prefs.getContrastValue()));
}
}